package cn.itrigger.mojos;

import cn.itrigger.utils.CommandLineUtils;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;

import java.util.Map;
import java.util.Properties;
import java.util.Set;

public abstract class ItriggerMojo extends AbstractMojo {

    @Parameter(property = "project")
    protected MavenProject project;
    @Parameter(property = "nexusUrl")
    protected String nexusUrl;
    //版本级别
    @Parameter(property = "versionLevel", defaultValue = "3")
    protected String versionLevel;
    //git地址
    @Parameter(property = "gitUrl")
    protected String gitUrl;

    @Parameter(property = "dailySubffix", defaultValue = "-SNAPSHOT")
    protected String dailySubffix;
    @Parameter(property = "uatSubffix", defaultValue = "u")
    protected String uatSubffix;
    @Parameter(property = "prodSubffix", defaultValue = "")
    protected String prodSubffix;
    //nexus上拉去依赖jar包的仓库
    @Parameter(property = "env")
    protected String env;
    @Parameter(property = "help", defaultValue = "false")
    protected String help;
    //daily环境的分支
    @Parameter(property = "dailyBranch")
    protected String dailyBranch;
    //uat环境的分支
    @Parameter(property = "uatBranch")
    protected String uatBranch;
    //prod环境分支
    @Parameter(property = "prodBranch", defaultValue = "master")
    protected String prodBranch;
    //打标签
    @Parameter(property = "tag", defaultValue = "false")
    protected String tag;
    @Parameter(property = "userName")
    protected String userName;
    @Parameter(property = "userEmail")
    protected String userEmail;
    @Parameter(property = "name")
    protected String name;
    @Parameter(property = "password")
    protected String password;
    @Parameter(property = "fixVersionNumber", defaultValue = "")
    protected String fixVersionNumber;
    @Parameter(property = "updateVersion", defaultValue = "false")
    protected String updateVersion;
    @Parameter(property = "module", defaultValue = "")
    protected String module;
    @Parameter(property = "deploy", defaultValue = "false")
    protected String deploy;
    @Parameter(property = "hasInstall", defaultValue = "false")
    protected String hasInstall;
    @Parameter(property = "uatIsRelease", defaultValue = "true")
    protected String uatIsRelease;
    @Parameter(property = "updateDailyVersion", defaultValue = "true")
    protected String updateDailyVersion;

    /**
     * 展示帮助信息
     */
    public void help() {
        StringBuffer sb = new StringBuffer("itrigger-version-manager插件帮助信息:");
        sb.append(System.lineSeparator());
        sb.append("-Dhelp=[true|false]             查看帮助信息,true:显示帮助信息;false：不显示帮助信息").append(System.lineSeparator());
        sb.append("-DgitUrl=[gitUrl]               项目对应的git地址，daily发布该参数可以为空").append(System.lineSeparator());
        sb.append("-DnexusUrl=[nexusUrl]           上传jar包的maven私服地址").append(System.lineSeparator());
        sb.append("-DversionLevel=[1|2|3|4]        版本级别，控制各级版本号,默认值为：3").append(System.lineSeparator());
        sb.append("-DdailySubffix=[dailySubffix]   daily环境版本号后缀，默认为-SNAPSHOT").append(System.lineSeparator());
        sb.append("-DuatSubffix=[uatSubffix]       uat环境版本号后缀，默认为u").append(System.lineSeparator());
        sb.append("-DprodSubffix=[prodSubffix]     prod环境版本号后缀，默认为空").append(System.lineSeparator());
        sb.append("-Denv=[env]                     拉取依赖jar包的maven仓库").append(System.lineSeparator());
        sb.append("-DdailyBranch=[dailyBranch]     daily环境的git分支").append(System.lineSeparator());
        sb.append("-DuatBranch=[uatBranch]         uat环境的git分支").append(System.lineSeparator());
        sb.append("-DprodBranch=[prodBranch]       prod环境的git分支").append(System.lineSeparator());
        sb.append("-Dtag=[true|false]              是否往git中打标签").append(System.lineSeparator());
        sb.append("-DuserName=[userName]           git服务器的用户名").append(System.lineSeparator());
        sb.append("-DuserEmail=[userEmail]         git服务器的邮箱").append(System.lineSeparator());
        sb.append("-DfixVersionNumber=[fixVersionNumber]   固定版本号,可以指定固定版本号，不自定迭代").append(System.lineSeparator());
        sb.append("-DupdateVersion=[updateVersion]  是否更新版本号").append(System.lineSeparator());
        sb.append("-Dmodule=[module]               对指定模块编译及上传nexus").append(System.lineSeparator());
        sb.append("-Ddeploy=[deploy]               是否发布到nexus").append(System.lineSeparator());
        sb.append("-DuatIsRlease=[true|false]               uat环境的版本是否采用release发布").append(System.lineSeparator());
        sb.append("-DupdateDailyVersion=[true|false]               prod发布后是否自动升级daily版本号").append(System.lineSeparator());
        sb.append("").append(System.lineSeparator());
        System.out.println(sb.toString());
    }

    public abstract void validate() throws MojoExecutionException;

}
